/*
 * @Author: your name
 * @Date: 2021-07-05 10:03:13
 * @LastEditTime: 2021-07-05 10:13:43
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \vue-hr-project\src\utils\transTreeData.js
 */
/**
 * @description: 树形数据处理
 * @param {*} list  线性平铺的数组
 * @return {*}  处理之后的属性数组
 */
export function transTreeData(list) {
  const newList = []
  // 书写处理逻辑
  // 核心思路：寻找父节点的过程  pid字段去匹配id字段 如果匹配上就是它的子节点
  // 具体实现：
  // 1. 遍历list中的每一项 使用id字段作为key,使用自身作为value形成一个map对象结构
  // 2. 遍历list中的每一项 使用它们的pid 去匹配map结构中的key
  //    如果匹配上 就是它的子节点 就添加到它的children属性中就可以了
  //    如果匹配不上 证明它自己就是最顶层的节点
  // 隐藏的点：由于js引用类型的存储特性 只需要遍历一次 寻找父节点结束 嵌套结构也就形成了
  const map = {}
  list.forEach(item => {
    item.children = []
    map[item.id] = item
  })
  list.forEach(item => {
    if (map[item.pid]) {
      // 匹配上了
      map[item.pid].children.push(item)
    } else {
      // 没匹配上
      newList.push(item)
    }
  })
  return newList
  // js复杂类型 存储的是内存的指针  一处修改 另外一处也会同步更新
}
